

#include "NpcMgr.h"
#include "base/core/log.h"
#include "Character/monster/MonsterMgr.h"
#include "Character/CreatureMgr.h"

NpcMgr::NpcMgr()
{

}

NpcMgr::~NpcMgr()
{
	
}

bool NpcMgr::Init()
{
	//m_mapNpc.clear();
	return true;
}

bool NpcMgr::UnInit()
{
	/*mapNpc::iterator it = m_mapNpc.begin();
	Npc* pNpc = nullptr;
	for (mapNpc::iterator it = m_mapNpc.begin(); it != m_mapNpc.end(); it++)
	{
		pNpc = it->second;
		if (pNpc == nullptr)
			continue;

		if (!pNpc->UnInit())
		{
			LogErrFmtPrint("npc unint error can case link memery, npcCid:%d, npcId:%d", pNpc->GetCid(), pNpc->GetNpcId());
		}

		it->second = nullptr;
		g_GetCreatureMgr()->RecyleCreature(pNpc);
	}

	m_mapNpc.clear();*/

	return true;
}

bool NpcMgr::Update(uint64_t tick)
{
	return true;
}

//Npc* NpcMgr::CreateNpc(uint32_t npcId, uint32_t sceneId, Point3<float>& bornPos)
//{
//	Npc* pNpc = nullptr;
//	pNpc = dynamic_cast<Npc*>(g_GetCreatureMgr()->MallocCreature(CREATURE_NPC));
//
//	if (pNpc == nullptr)
//	{
//		return nullptr;
//	}
//
//	if (!pNpc->Born(g_GetCreatureMgr()->NextId(), npcId, sceneId, bornPos))
//	{
//		LogErrFmtPrint("create npc:npcId:%d failed , sceneId:%d", npcId, sceneId);
//		g_GetCreatureMgr()->RecyleCreature(pNpc);
//		return nullptr;
//	}
//
//	m_mapNpc[pNpc->GetCid()] = pNpc;
//
//	return pNpc;
//}	
//
//void NpcMgr::RecyleNpc(Npc* pNpc)
//{
//	if (pNpc == nullptr)
//	{
//		return;
//	}
//
//	uint64_t cid = pNpc->GetCid();
//	mapNpc::iterator it = m_mapNpc.find(cid);
//	if (it == m_mapNpc.end())
//	{
//		return;
//	}
//
//	m_mapNpc.erase(it);
//
//	if (!pNpc->UnInit())
//	{
//		LogErrFmtPrint("npc recyle error, npcCid:%d unInit faield", cid);
//	}
//
//	g_GetCreatureMgr()->RecyleCreature(pNpc);
//	pNpc = nullptr;
//}
//
//Npc* NpcMgr::GetNpc(CharIDType npcCid)
//{
//	mapNpc::iterator it = m_mapNpc.find(npcCid);
//	if (it == m_mapNpc.end())
//	{
//		return nullptr;
//	}
//
//	return it->second;
//}
//
//void NpcMgr::NpcDeadHandle(CharIDType npcCid)
//{
//
//}
//
//
//void NpcMgr::OnNpcFightCreateMonster(CharIDType npcCid)
//{
//	mapNpc::iterator iter = m_mapNpc.find(npcCid);
//	if (iter == m_mapNpc.end())
//	{
//		LogErrFmtPrint("npcCid:%d can't find", npcCid);
//		return;
//	}
//
//	Npc* pNpc = iter->second;
//	if (pNpc == nullptr)
//	{
//		return;
//	}
//
//	if (pNpc->IsFightType() == false)
//	{
//		return;
//	}
//
//	if (pNpc->GetStatus() == NpcStatus::ENUM_NPC_STATUS_FIGHT)
//	{
//		return;
//	}
//
//	Monster* pMonster = g_GetCreatureMgr()->CreateMonster(pNpc->GetLinkMonsterId(), pNpc->GetSceneId(), pNpc->GetBornPos());
//	if (pMonster == nullptr)
//	{
//		LogErrFmtPrint("g_GetCreatureMgr()->CreateMonster(%d,%d,...) failed", pNpc->GetLinkMonsterId(), pNpc->GetSceneId());
//		return;
//	}
//
//	m_monsterToNpc.insert(std::make_pair(pMonster->GetCid(), pNpc->GetCid()));
//
//	pNpc->OnFightLeaveScene();
//	
//	pNpc->SetStatus(NpcStatus::ENUM_NPC_STATUS_FIGHT);
//}
//
//void NpcMgr::MonterDeadEndNpcFight(CharIDType monsterCid)
//{
//	mapMonsterNpc::iterator it = m_monsterToNpc.find(monsterCid);
//	if (it == m_monsterToNpc.end())
//	{
//		return;
//	}
//
//	mapNpc::iterator npcIt = m_mapNpc.find(it->second);
//	if (npcIt == m_mapNpc.end())
//	{
//		m_mapNpc.erase(npcIt);
//		return;
//	}
//
//	Npc* pNpc = npcIt->second;
//	if (pNpc == nullptr)
//	{
//		return;
//	}
//
//	pNpc->EndFightEnterScene();
//	pNpc->SetStatus(NpcStatus::ENUM_NPC_STATUS_NORMAL);
//}
